package in.lib.handler.streams;
import in.lib.adapter.PostAdapter;
import in.lib.exception.ExceptionHandler;
import in.lib.handler.base.PostStreamResponseHandler;
import in.lib.manager.SettingsManager;
import in.lib.thread.StreamFragmentRunnable;
import in.model.base.NetObject;
import in.obj.StreamMarker;
import in.rob.client.R;
import in.rob.client.page.TimelinePage;
import android.content.Context;
public class TimelineResponseHandler extends PostStreamResponseHandler
{
private final int forceRefreshCount;
public TimelineResponseHandler(Context c, boolean append, int forceRefreshCount)
{
super(c, append);
this.forceRefreshCount = forceRefreshCount;
setFailMessage(c.getString(R.string.timeline_stream_fail));
}
@Override public void onCallback()
{
if (getFragment() != null)
{
getFragment().runOnUiThread(responseRunner);
}
if (getFragment() != null)
{
getFragment().extractUsersAndTags(getObjects());
}
}
private StreamFragmentRunnable responseRunner = new StreamFragmentRunnable()
{
@Override public void run()
{
if (getFragment() != null)
{
try
{
StreamMarker currentMarker = getFragment().getAdapter().getStreamMarker();
getFragment().getRefreshHelper().finish();
getFragment().getHeadedListView().setBlockLayoutChildren(true);
getFragment().getAdapter().setStreamMarker(getMarker());
getFragment().getAdapter().setHasMore(getHasMore());
if (getAppend())
{
getFragment().getAdapter().setLastId(getLastId());
getFragment().getAdapter().addItems(getObjects());
}
else
{
if (SettingsManager.isStreamMarkerEnabled())
{
boolean syncMarker = true;
String lastReadId = getMarker().getId();
if (currentMarker != null)
{
if (!SettingsManager.isStreamMarkerPastEnabled())
{
try
{
long markerId = Long.parseLong(currentMarker.getId());
long postId = Long.parseLong(lastReadId);
if (postId < markerId)
{
syncMarker = false;
}
}
catch (Exception e){}
}
}
if (syncMarker)
{
int[] d = getFragment().getFirstViewPosition(getObjects());
boolean brokenStream = d[2] == 1;
if (getFragment().getAdapter().getCount() > 0 && brokenStream)
{
((PostAdapter)getFragment().getAdapter()).setBreakPosition(getObjects().size() - 1);
int[] d2 = getFragment().getLastViewPosition(null);
d2[0] += getObjects().size();
getFragment().getAdapter().setFirstId(getFirstId());
getFragment().getAdapter().prependItems(getObjects());
getFragment().getAdapter().setLastPositionAnimated(getFragment().getAdapter().getLastPositionAnimated() + 20);
setNewPostCount(getObjects().size());
}
else
{
int[] d2 = getFragment().getLastViewPosition(getObjects());
//calculateNewPostCount();
getFragment().getAdapter().setLastId(getLastId());
getFragment().getAdapter().setFirstId(getFirstId());
getFragment().getAdapter().setItems(getObjects());
((PostAdapter)getFragment().getAdapter()).setBreakPosition(-2);
}
int pos = getFragment().getAdapter().indexOf(getFragment().getAdapter().getItemById(lastReadId));
pos += getFragment().getListView().getHeaderViewsCount();
getFragment().registerPositionReset(pos, 0);
}
}
else
{
int[] d = getFragment().getFirstViewPosition(getObjects());
boolean brokenStream = d[2] == 1;
if (getFragment().getAdapter().getCount() > 0 && !getAppend() && brokenStream && forceRefreshCount < 1 && SettingsManager.isTimelineBreakEnabled())
{
((PostAdapter)getFragment().getAdapter()).setBreakPosition(getObjects().size() - 1);
int[] d2 = getFragment().getLastViewPosition(null);
d2[0] += getObjects().size();
getFragment().getAdapter().setFirstId(getFirstId());
getFragment().getAdapter().prependItems(getObjects());
getFragment().getAdapter().setLastPositionAnimated(getFragment().getAdapter().getLastPositionAnimated() + 20);
getFragment().registerPositionReset(d2[0], d2[1]);
setNewPostCount(getObjects().size());
}
else
{
int[] d2 = getFragment().getLastViewPosition(getObjects());
calculateNewPostCount();
getFragment().getAdapter().setLastId(getLastId());
getFragment().getAdapter().setFirstId(getFirstId());
getFragment().getAdapter().setItems(getObjects());
((PostAdapter)getFragment().getAdapter()).setBreakPosition(-2);
getFragment().registerPositionReset(d2[0], d2[1]);
}
}
}
if (!getAppend())
{
getFragment().setTicker(getNewPostCount());
}
setFinishedLoading(getAppend());
if (getFragment() instanceof TimelinePage)
{
((TimelinePage)getFragment()).setLastRefreshed(System.currentTimeMillis());
}
}
catch (Exception e)
{
ExceptionHandler.sendException(e);
}
}
super.run();
}
private void calculateNewPostCount()
{
int newPostCount = 0;
String firstId = getFragment().getCurrentItemId(0);
boolean tryNewCount = true;
try
{
long firstIdLong = Long.valueOf(firstId);
long firstNewIdLong = Long.valueOf(getFirstId());
if (firstNewIdLong <= firstIdLong)
{
tryNewCount = false;
}
}
catch (Exception e){}
if (tryNewCount)
{
for (NetObject p : getObjects())
{
if (p.getId().equals(firstId))
{
break;
}
newPostCount++;
}
setNewPostCount(newPostCount);
}
}
};
}